﻿using sistem.Korisnicke_kontrole;
using sistem;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sistem
{
    public partial class UcenikForma : Form
    {
        private Ucenik ucenik;
        private List<UcenikRazredVeza> ucenikRazredVeza;
        private Razred ucenikovRazred;
        private List<RazredPredmetVeza> razredPredmet;
        private List<Predmet> predmeti;
        private Profesor razrednik;
        private string ocjenaIzVladanja;
        public String username;

        public UcenikForma()
        {
            InitializeComponent();
        }

        public UcenikForma(Ucenik ucenik)
        {
            // TODO: Complete member initialization
            InitializeComponent();
            this.ucenik = ucenik;
            DAL.DAL dal = DAL.DAL.Instanca;
            dal.kreirajKonekciju("127.0.0.1", "skola", "root", "");
            DAL.DAL.UcenikRazredVezaDAO urvdao = new DAL.DAL.UcenikRazredVezaDAO();//pronadjirazred
            ucenikRazredVeza = urvdao.getByUcenikId(ucenik.ID);//ubaci ucenikRazredVezu
            dal.terminirajKonekciju();
            dal.kreirajKonekciju("127.0.0.1", "skola", "root", "");
            DAL.DAL.RazredDAO rdao = new DAL.DAL.RazredDAO();//kad imas vezu Ucenikrazred uzmi taj razred
            ucenikovRazred = rdao.getById(ucenikRazredVeza[0].RazredID);//prvi i jedini u listi je nas trazeni pa vrati taj razzred
            dal.terminirajKonekciju();
            dal.kreirajKonekciju("127.0.0.1", "skola", "root", "");
            DAL.DAL.RazredPredmetVezaDAO rpvdao = new DAL.DAL.RazredPredmetVezaDAO();
            List<RazredPredmetVeza> razredPredmet = rpvdao.getByRazredId(ucenikovRazred.ID);
            dal.terminirajKonekciju();
            predmeti = new List<Predmet>();
            for (int i = 0; i < razredPredmet.Count; i++)
            {
                dal.kreirajKonekciju("127.0.0.1", "skola", "root", "");
                DAL.DAL.PredmetDAO pdao = new DAL.DAL.PredmetDAO();
                Predmet predmet = pdao.getById(razredPredmet[i].PredmetID);
                dal.terminirajKonekciju();
                predmeti.Add(predmet);
            }
            dal.kreirajKonekciju("127.0.0.1", "skola", "root", "");
            DAL.DAL.ProfesorDAO profadao = new DAL.DAL.ProfesorDAO();
            razrednik = profadao.getById(ucenikovRazred.RazrednikID);
            dal.terminirajKonekciju();
            dal.kreirajKonekciju("127.0.0.1", "skola", "root", "");
            DAL.DAL.OcjenaVladanjeDAO ovdao = new DAL.DAL.OcjenaVladanjeDAO();
            dal.terminirajKonekciju();
            dal.kreirajKonekciju("127.0.0.1", "skola", "root", "");
            List<OcjenaVladanje> vladanja=new List<OcjenaVladanje>();
            vladanja=ovdao.getByExample("id",Convert.ToString(ucenik.ID));
            dal.terminirajKonekciju();
            vladanja.Sort();
            //ocjenaIzVladanja = Convert.ToString(vladanja[0].Vrijednost);
            DAL.DAL da = DAL.DAL.Instanca;
            da.kreirajKonekciju("127.0.0.1", "skola", "root", "");
            /*DAL.DAL.IzostanakDAO izd = new DAL.DAL.IzostanakDAO();
            List<Izostanak> izostanci = izd.getByExample("ucenik_id", ucenik.ID.ToString());*/
            da.terminirajKonekciju();
            int opravdani = 0, neopravdani = 0;
           /* foreach(Izostanak i in izostanci)
            {
                if(i.Opravdano)
                    opravdani++;
                else
                    neopravdani++;
            }*/

            this.label2.Text = ucenik.Ime + " " + ucenik.Prezime;
            this.label4.Text = Convert.ToString(ucenikovRazred.Godina) + " - " + Convert.ToString(ucenikovRazred.Odjeljenje);
            this.label6.Text = Convert.ToString(razrednik.Ime) + " " + Convert.ToString(razrednik.Prezime);
            this.label8.Text = ocjenaIzVladanja;
            this.label10.Text = opravdani.ToString();
            this.label12.Text = neopravdani.ToString();
            this.label14.Text = (opravdani + neopravdani).ToString();
            this.richTextBox1.Text = ucenik.PsiholoskiISocioloskiRazvoj;
            this.korisnikKontrola1.postaviUser(ucenik.Username);
            this.korisnikKontrola1.postaviKorisnickiTip("Ucenik");
            this.korisnikKontrola1.spremiKontrole(this.buttonRaspored, this.buttonPredmeti);
            this.korisnikKontrola1.ucitajFlow(this.flowPanelPretraga);
            this.korisnikKontrola1.postaviEvent();
        }

        /*private void funkcijaZaSMS(Ucenik u,Cas c)
        {


        }*/

        private void funkcijaZatvaranjaButtona(FlowLayoutPanel parametar)
        {
            List<Button> buttoni = new List<Button>();
            List<FlowLayoutPanel> flowPaneli = new List<FlowLayoutPanel>();
            foreach (Control c in parametar.Controls)
            {
                if (c is Button)
                    buttoni.Add(c as Button);
                if (c is FlowLayoutPanel)
                    flowPaneli.Add(c as FlowLayoutPanel);
            }
            if (buttoni.Count != 0)
            {
                for (int i = 0; i < buttoni.Count; i++)
                    if (buttoni[i].Text[0] == '-')
                        buttoni[i].PerformClick();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (buttonRaspored.Text[0] == '+')
            {
                buttonRaspored.Text = '-' + buttonRaspored.Text.Remove(0, 1);
                flowPanelRaspored.Size = new Size(1200, 360);
                RasporedZaKorisnike r = new RasporedZaKorisnike(ucenik as Korisnik);
                flowPanelRaspored.Controls.Add(r);
            }
            else
            {
                buttonRaspored.Text = '+' + buttonRaspored.Text.Remove(0, 1);
                flowPanelRaspored.Size = new Size(1200, 0);
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            if (buttonPredmeti.Text[0] == '+')
            {
                buttonPredmeti.Text = '-' + buttonPredmeti.Text.Remove(0, 1);
                int brojPredmetaKojeIma = predmeti.Count;
                flowPanelPredmeti.Size = new Size(1200, 30 * brojPredmetaKojeIma);
                for (int i = 0; i < brojPredmetaKojeIma; i++)
                {
                    Button buttonPojediniPredmet = new Button();
                    buttonPojediniPredmet.BackColor = Color.RoyalBlue;
                    buttonPojediniPredmet.Dock = DockStyle.Top;
                    buttonPojediniPredmet.FlatStyle = FlatStyle.Popup;
                    buttonPojediniPredmet.Location = new Point(0, 0);
                    buttonPojediniPredmet.Margin = new Padding(0, 0, 0, 0);
                    buttonPojediniPredmet.Size = new Size(1200, 30);
                    buttonPojediniPredmet.Text = "+ " + predmeti[i].PuniNaziv;
                    buttonPojediniPredmet.TextAlign = ContentAlignment.MiddleLeft;
                    buttonPojediniPredmet.UseVisualStyleBackColor = false;
                    buttonPojediniPredmet.Click += delegate { buttonPojediniPredmet_Click(buttonPojediniPredmet,e,predmeti[i]); };
                    FlowLayoutPanel flowPojediniPredmet = new FlowLayoutPanel();
                    flowPojediniPredmet.Dock = System.Windows.Forms.DockStyle.Top;
                    flowPojediniPredmet.Location = new Point(0, 0);
                    flowPojediniPredmet.Margin = new Padding(0, 0, 0, 0);
                    flowPojediniPredmet.Size = new Size(1200, 0);
                    flowPanelPredmeti.Controls.Add(buttonPojediniPredmet);
                    flowPanelPredmeti.Controls.Add(flowPojediniPredmet);
                }
            }
            else
            {
                buttonPredmeti.Text = '+' + buttonPredmeti.Text.Remove(0, 1);
                flowPanelPredmeti.Size = new Size(1200, 0);
                funkcijaZatvaranjaButtona(flowPanelPredmeti);
                flowPanelPredmeti.Controls.Clear();
            }
        }

        private void buttonPojediniPredmet_Click(object sender, EventArgs e,Predmet p)
        {
            Button buttonPojediniPredmet = sender as Button;
            FlowLayoutPanel flowPojediniPredmet = new FlowLayoutPanel();
            List<Button> listaButtona = new List<Button>();
            List<FlowLayoutPanel> listaPanela = new List<FlowLayoutPanel>();
            foreach (Control c in buttonPojediniPredmet.Parent.Controls)
            {
                if (c is Button)
                    listaButtona.Add(c as Button);
                if (c is FlowLayoutPanel)
                    listaPanela.Add(c as FlowLayoutPanel);
            }
            int pozicija;
            for (int i = 0; i < listaButtona.Count; i++)
            {
                if (buttonPojediniPredmet == listaButtona[i])
                {
                    pozicija = i;
                    flowPojediniPredmet = listaPanela[i];
                    break;
                }
            }
            if (buttonPojediniPredmet.Text[0] == '+')
            {
                buttonPojediniPredmet.Text = '-' + buttonPojediniPredmet.Text.Remove(0, 1);
                flowPojediniPredmet.Size = new Size(1200, 60);
                flowPanelPredmeti.Height = flowPanelPredmeti.Height + 60;
                for (int i = 0; i < 2; i++)
                {
                    Button button = new Button();
                    button.BackColor = Color.CornflowerBlue;
                    button.Location = new Point(0, 30 * i);
                    button.Dock = DockStyle.Top;
                    button.FlatStyle = FlatStyle.Popup;
                    button.Margin = new Padding(0, 0, 0, 0);
                    button.Size = new Size(1200, 30);
                    if (i == 0)
                    {
                        button.Text = "+ Prisustvo";
                        button.Click += delegate { buttonPrisustvo_Click(button, e, p); };
                    }
                    else
                    {
                        button.Text = "+ Ocjene";
                        button.Click += delegate { buttonOcjene_Click(button, e, p); };
                    }
                    button.TextAlign = ContentAlignment.MiddleLeft;
                    button.UseVisualStyleBackColor = false;
                    FlowLayoutPanel flow = new FlowLayoutPanel();
                    flow.Dock = System.Windows.Forms.DockStyle.Top;
                    flow.Location = new System.Drawing.Point(1, 71);
                    flow.Margin = new Padding(0, 0, 0, 0);
                    flow.Size = new Size(1200, 0);
                    flowPojediniPredmet.Controls.Add(button);
                    flowPojediniPredmet.Controls.Add(flow);
                }
            }
            else
            {
                buttonPojediniPredmet.Text = '+' + buttonPojediniPredmet.Text.Remove(0, 1);
                flowPojediniPredmet.Size = new Size(1200, 0);
                funkcijaZatvaranjaButtona(flowPojediniPredmet);
                flowPanelPredmeti.Height = flowPanelPredmeti.Height - 60;
                flowPojediniPredmet.Controls.Clear();
            }
        }

        private void buttonPrisustvo_Click(object sender, EventArgs e, Predmet p)
        {
            Button buttonPrisustvo = sender as Button;
            FlowLayoutPanel flowPrisustvo = new FlowLayoutPanel();
            List<Button> listaButtona = new List<Button>();
            List<FlowLayoutPanel> listaPanela = new List<FlowLayoutPanel>();
            foreach (Control c in buttonPrisustvo.Parent.Controls)
            {
                if (c is Button)
                    listaButtona.Add(c as Button);
                if (c is FlowLayoutPanel)
                    listaPanela.Add(c as FlowLayoutPanel);
            }
            for (int i = 0; i < listaButtona.Count; i++)
            {
                if (buttonPrisustvo == listaButtona[i])
                {
                    flowPrisustvo = listaPanela[i];
                    break;
                }
            }
           
            DAL.DAL dal = DAL.DAL.Instanca;
            dal.kreirajKonekciju("127.0.0.1", "skola", "root", "");
            if (buttonPrisustvo.Text[0] == '+')
            {
                buttonPrisustvo.Text = '-' + buttonPrisustvo.Text.Remove(0, 1);
                flowPrisustvo.Size = new Size(1200, 215);
                flowPrisustvo.Parent.Height = flowPrisustvo.Parent.Height + 215;
                flowPanelPredmeti.Height = flowPanelPredmeti.Height + 215;
                PrisustvoKontrola prisustva = new PrisustvoKontrola(ucenik, ucenik.ID,p.ID);
                flowPrisustvo.Controls.Add(prisustva);
            }
            else
            {
                buttonPrisustvo.Text = '+' + buttonPrisustvo.Text.Remove(0, 1);
                flowPrisustvo.Size = new Size(1200, 0);
                funkcijaZatvaranjaButtona(flowPrisustvo);
                flowPrisustvo.Parent.Height = flowPrisustvo.Parent.Height - 215;
                flowPanelPredmeti.Height = flowPanelPredmeti.Height - 215;
                flowPrisustvo.Controls.Clear();
            }
            dal.terminirajKonekciju();
        }

        private void buttonOcjene_Click(object sender, EventArgs e,Predmet p)
        {
            Button buttonOcjene = sender as Button;
            FlowLayoutPanel flowOcjene = new FlowLayoutPanel();
            List<Button> listaButtona = new List<Button>();
            List<FlowLayoutPanel> listaPanela = new List<FlowLayoutPanel>();
            foreach (Control c in buttonOcjene.Parent.Controls)
            {
                if (c is Button)
                    listaButtona.Add(c as Button);
                if (c is FlowLayoutPanel)
                    listaPanela.Add(c as FlowLayoutPanel);
            }
            for (int i = 0; i < listaButtona.Count; i++)
            {
                if (buttonOcjene == listaButtona[i])
                {
                    flowOcjene = listaPanela[i];
                    break;
                }
            }
            DAL.DAL dal = DAL.DAL.Instanca;
            dal.kreirajKonekciju("127.0.0.1", "skola", "root", "");
            if (buttonOcjene.Text[0] == '+')
            {
                buttonOcjene.Text = '-' + buttonOcjene.Text.Remove(0, 1);
                flowOcjene.Size = new Size(1200, 215);
                flowOcjene.Parent.Height = flowOcjene.Parent.Height + 215;
                flowPanelPredmeti.Height = flowPanelPredmeti.Height + 215;
                OcjenaKontrola ocjene = new OcjenaKontrola(ucenik,ucenik.ID,p.ID);
                flowOcjene.Controls.Add(ocjene);
            }
            else
            {
                buttonOcjene.Text = '+' + buttonOcjene.Text.Remove(0, 1);
                flowOcjene.Size = new Size(1200, 0);
                funkcijaZatvaranjaButtona(flowOcjene);
                flowOcjene.Parent.Height = flowOcjene.Parent.Height - 215;
                flowPanelPredmeti.Height = flowPanelPredmeti.Height - 215;
                flowOcjene.Controls.Clear();
            }
            dal.terminirajKonekciju();
        }
    }
}
